-- ============================================
-- PostgreSQL 数据库建表脚本 - 评价模块
-- 包含：商品评价表、服务评价表
-- 创建时间：2025/11/7
-- ============================================

-- 创建商品评价表
-- 用于存储用户对购买商品的评价信息
CREATE TABLE IF NOT EXISTS product_review (
    id BIGSERIAL PRIMARY KEY,                                -- 评价ID，自增主键
    product_id BIGINT NOT NULL,                              -- 商品ID，关联商品表
    user_id BIGINT NOT NULL,                                 -- 用户ID，关联用户表
    username VARCHAR(50) NOT NULL,                           -- 用户名（匿名时显示"匿名用户"）
    order_id BIGINT NOT NULL,                                -- 订单ID，关联订单表
    rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5), -- 评分（1-5星）
    content VARCHAR(500) NOT NULL,                           -- 评价内容（10-500字符）
    images VARCHAR(1000),                                    -- 评价图片（多张图片URL用逗号分隔）
    is_anonymous INTEGER DEFAULT 0,                          -- 是否匿名：0-否，1-是
    admin_reply VARCHAR(500),                                -- 管理员回复内容
    reply_time TIMESTAMP,                                    -- 管理员回复时间
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,         -- 创建时间
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP          -- 更新时间
);

-- 添加表注释
COMMENT ON TABLE product_review IS '商品评价表';
COMMENT ON COLUMN product_review.id IS '评价ID';
COMMENT ON COLUMN product_review.product_id IS '商品ID';
COMMENT ON COLUMN product_review.user_id IS '用户ID';
COMMENT ON COLUMN product_review.username IS '用户名';
COMMENT ON COLUMN product_review.order_id IS '订单ID';
COMMENT ON COLUMN product_review.rating IS '评分（1-5星）';
COMMENT ON COLUMN product_review.content IS '评价内容';
COMMENT ON COLUMN product_review.images IS '评价图片（多张图片用逗号分隔）';
COMMENT ON COLUMN product_review.is_anonymous IS '是否匿名：0-否，1-是';
COMMENT ON COLUMN product_review.admin_reply IS '管理员回复';
COMMENT ON COLUMN product_review.reply_time IS '回复时间';
COMMENT ON COLUMN product_review.create_time IS '创建时间';
COMMENT ON COLUMN product_review.update_time IS '更新时间';

-- 创建索引（提高查询性能）
CREATE INDEX IF NOT EXISTS idx_product_review_product_id ON product_review(product_id);
CREATE INDEX IF NOT EXISTS idx_product_review_user_id ON product_review(user_id);
CREATE INDEX IF NOT EXISTS idx_product_review_order_id ON product_review(order_id);
CREATE INDEX IF NOT EXISTS idx_product_review_create_time ON product_review(create_time);

-- 创建更新时间触发器
CREATE OR REPLACE FUNCTION update_product_review_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.update_time = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trigger_update_product_review_timestamp
    BEFORE UPDATE ON product_review
    FOR EACH ROW
    EXECUTE FUNCTION update_product_review_timestamp();

-- ============================================

-- 创建服务评价表
-- 用于存储用户对预约服务的评价信息
CREATE TABLE IF NOT EXISTS service_review (
    id BIGSERIAL PRIMARY KEY,                                -- 评价ID，自增主键
    service_type_id BIGINT NOT NULL,                         -- 服务类型ID，关联服务类型表
    user_id BIGINT NOT NULL,                                 -- 用户ID，关联用户表
    username VARCHAR(50) NOT NULL,                           -- 用户名（匿名时显示"匿名用户"）
    reservation_id BIGINT NOT NULL,                          -- 预约ID，关联预约表
    rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5), -- 评分（1-5星）
    content VARCHAR(500) NOT NULL,                           -- 评价内容（10-500字符）
    images VARCHAR(1000),                                    -- 评价图片（多张图片URL用逗号分隔）
    is_anonymous INTEGER DEFAULT 0,                          -- 是否匿名：0-否，1-是
    admin_reply VARCHAR(500),                                -- 管理员回复内容
    reply_time TIMESTAMP,                                    -- 管理员回复时间
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,         -- 创建时间
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP          -- 更新时间
);

-- 添加表注释
COMMENT ON TABLE service_review IS '服务评价表';
COMMENT ON COLUMN service_review.id IS '评价ID';
COMMENT ON COLUMN service_review.service_type_id IS '服务类型ID';
COMMENT ON COLUMN service_review.user_id IS '用户ID';
COMMENT ON COLUMN service_review.username IS '用户名';
COMMENT ON COLUMN service_review.reservation_id IS '预约ID';
COMMENT ON COLUMN service_review.rating IS '评分（1-5星）';
COMMENT ON COLUMN service_review.content IS '评价内容';
COMMENT ON COLUMN service_review.images IS '评价图片（多张图片用逗号分隔）';
COMMENT ON COLUMN service_review.is_anonymous IS '是否匿名：0-否，1-是';
COMMENT ON COLUMN service_review.admin_reply IS '管理员回复';
COMMENT ON COLUMN service_review.reply_time IS '回复时间';
COMMENT ON COLUMN service_review.create_time IS '创建时间';
COMMENT ON COLUMN service_review.update_time IS '更新时间';

-- 创建索引（提高查询性能）
CREATE INDEX IF NOT EXISTS idx_service_review_service_type_id ON service_review(service_type_id);
CREATE INDEX IF NOT EXISTS idx_service_review_user_id ON service_review(user_id);
CREATE INDEX IF NOT EXISTS idx_service_review_reservation_id ON service_review(reservation_id);
CREATE INDEX IF NOT EXISTS idx_service_review_create_time ON service_review(create_time);

-- 创建更新时间触发器
CREATE OR REPLACE FUNCTION update_service_review_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.update_time = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trigger_update_service_review_timestamp
    BEFORE UPDATE ON service_review
    FOR EACH ROW
    EXECUTE FUNCTION update_service_review_timestamp();

-- ============================================
-- 建表完成
-- ============================================
